import type {DevSearchTableProps} from 'devecoui-plus'

/**
 * DevSearchTable组件调用接口后处理返回的数据：默认情况下是取结果中的data内容。
 * @param res - 调用接口后返回的完整数据（注：如果axios处理了结果数据res返回的是处理后的内容）。
 * @param props - DevSearchTable组件的props。
 * @param type- data表示要处理接口返回的列表数据，total表示要处理接口返回的总条数。
 * @returns 默认返回值为接口回调data内容。
 */
function devSearchTableFieldsFn(res: any, props: DevSearchTableProps, type: 'data'): object[];
function devSearchTableFieldsFn(res: any, props: DevSearchTableProps, type: 'total'): number;
function devSearchTableFieldsFn(res: any, props: DevSearchTableProps, type: 'data' | 'total'): object[] | number {
    const result = res.data;
    if (type === 'data') {
        if (props.isPagination) {
            return result[props.dataKey || 'list'] as object[];
        } else {
            return result as object[];
        }
    }
    if (type === 'total') {
        if (props.isPagination) {
            return result[props.totalKey || 'total'] * 1 || 0 as number;
        } else {
            return 0;
        }
    }
    return [];
}


/**
 * DevSelect组件调用接口后处理返回的数据：默认情况下是取结果中的data内容。
 * @param res
 * @returns 默认返回值为接口回调data内容。
 */
function devSelectFieldsFn(res: any) {
    return res.data || []
}

/**
 * DevSelectMutex组件调用接口后处理返回的数据：默认情况下是取结果中的data内容。
 */
function devSelectMutexFieldsFn(res: any) {
    return res.data || []
}

/**
 * DevCascaderMutex 组件调用接口后处理返回的数据：默认情况下是取结果中的data内容。
 */
function devCascaderMutexFieldsFn(res: any) {
    return res.data || []
}

/**
 * DevCascader 组件调用接口后处理返回的数据：默认情况下是取结果中的data内容。
 */
function devCascaderFieldsFn(res: any) {
    return res.data || []
}

/**
 * DevDownload组件调用接口后处理返回的数据：默认情况下是取结果中的data内容。
 * @param res
 */
function devDownloadFieldsFn(res: any) {
    return res.data || {}
}


export const fnConfig = {
    devSearchTableFieldsFn,
    devSelectFieldsFn,
    devSelectMutexFieldsFn,
    devCascaderMutexFieldsFn,
    devCascaderFieldsFn,
    devDownloadFieldsFn
};
